맨위로가기

메모리 디버거

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

메모리 디버거는 메모리 접근, 할당 및 해제를 모니터링하여 메모리 관련 오류를 찾아내는 도구이다. 응용 프로그램을 재컴파일하거나 가상 머신 환경에서 실행하여 메모리 누수, 잘못된 메모리 접근과 같은 문제를 감지하며, 소프트웨어의 신뢰성을 높이는 데 기여한다. 정적 분석 도구와 함께 사용하면 더욱 효과적인 디버깅이 가능하다. 주요 도구로는 Valgrind, AddressSanitizer, Visual Studio Debugger 등이 있다.

더 읽어볼만한 페이지

  • 메모리 관리 소프트웨어 - 프리페처
    프리페처는 윈도우 운영체제에서 응용 프로그램 실행 패턴 분석을 통해 필요한 데이터를 미리 로드하여 시스템 부팅 및 프로그램 실행 속도를 향상시키는 기능이다.
  • 메모리 관리 소프트웨어 - Mimalloc
    Mimalloc은 Microsoft에서 개발한 고성능 메모리 할당기로, 다양한 운영체제와 하드웨어 아키텍처를 지원하며 다중 스레드 환경에서 메모리 할당 및 해제 속도 향상에 초점을 맞추어 설계되었고 MIT 라이선스로 제공된다.
  • 디버깅 - 스택 추적
    스택 추적은 프로그램 실행 중 함수 호출 기록을 추적하여 오류 발생 시 디버깅 및 문제 해결에 필수적인 도구로, 호출 스택의 스택 프레임을 분석하여 프로그램 실행 경로를 파악하고 오류 원인을 추적하며 프로그램 안정성을 향상시키는 기술이다.
  • 디버깅 - 브레이크포인트
    브레이크포인트는 프로그램 디버깅 시 특정 지점에서 실행을 중단시키는 기술 또는 지점으로, 케이블 제거에서 유래하여 대화형 디버깅 환경으로 발전했으며, 명령, 데이터, 조건부 브레이크포인트 등 다양한 종류가 있고 프로그램 상태 조사 및 변경 도구와 함께 사용되며, 하드웨어나 소프트웨어 방식으로 구현될 수 있다.
메모리 디버거
개요
종류디버거
용도메모리 관련 문제 진단 및 수정
기능
주요 기능메모리 누수 탐지
메모리 손상 탐지
유효하지 않은 메모리 접근 탐지
부가 기능메모리 사용량 분석
메모리 할당 패턴 분석
힙 상태 분석
디버깅 지원중단점 설정
메모리 내용 검사 및 수정
콜 스택 추적
변수 값 추적
사용법
일반적인 사용 단계



사용 환경개발 환경
테스트 환경
운영 환경 (제한적)
장점 및 단점
장점메모리 관련 문제의 근본적인 원인 파악 가능
프로그램 안정성 향상
개발 효율성 향상
단점사용법 습득에 시간 소요
성능 저하 발생 가능성
오탐(False Positive) 가능성
종류
상용 메모리 디버거Valgrind
Purify
Dr. Memory
Memcheck (Valgrind의 일부)
오픈 소스 메모리 디버거AddressSanitizer (ASan)
MemorySanitizer (MSan)
LeakSanitizer (LSan)
ThreadSanitizer (TSan)
고려 사항
메모리 디버거 선택 기준지원하는 프로그래밍 언어 및 플랫폼
성능
기능
사용 편의성
가격 (상용 제품의 경우)
주의 사항메모리 디버거는 완벽하지 않으며, 모든 메모리 관련 문제를 탐지하지 못할 수 있음
오탐(False Positive)에 주의
성능에 미치는 영향을 고려하여 사용

2. 메모리 디버거의 작동 원리

메모리 디버거는 프로그램의 메모리 사용을 분석하여 잠재적인 문제점을 찾아낸다. 비정상적으로 높은 메모리 사용은 소프트웨어 노후화의 원인이 될 수 있으므로, 메모리 디버거는 프로그래머가 소프트웨어 버그를 방지하고 장시간 런타임 동안 소프트웨어의 높은 신뢰성을 보장하도록 돕는다.[1]

2. 1. 메모리 할당 및 해제 추적

메모리 디버거는 메모리 접근, 할당 및 해제를 모니터링한다. 많은 메모리 디버거는 애플리케이션이 API들이 기존의 동적 메모리 할당 라이브러리와 호환되거나 동적 링킹을 사용하는 특별한 동적 메모리 할당 라이브러리로 재컴파일되기를 요구한다. Electric Fence는 malloc으로 메모리 할당을 디버깅하는 디버거이다. Valgrind 같은 몇몇 메모리 디버거는 가상 머신과 유사한 환경에서 실행 파일을 실행하고 메모리 접근, 할당 및 해제를 모니터링하여 특별한 메모리 할당 라이브러리로 재컴파일할 필요가 없다.[1]

메모리 누수와 같은 메모리 문제를 찾는 것은 특정 조건에서만 나타날 수 있으므로 매우 시간이 많이 걸릴 수 있다. 메모리 오용을 감지하는 도구를 사용하면 이 과정을 훨씬 빠르고 쉽게 만들 수 있다.[1]

2. 2. 메모리 접근 감시

메모리 디버거는 메모리 접근, 할당 및 해제를 감시한다. 많은 메모리 디버거는 응용 프로그램이 기존의 동적 메모리 할당 라이브러리와 호환되거나 동적 링킹을 사용하는 특수 동적 메모리 할당 라이브러리로 재컴파일되기를 요구한다. Electric Fence는 malloc으로 메모리 할당을 디버그하는 디버거이다.[1] Valgrind 같은 몇몇 메모리 디버거는 가상 머신과 같은 환경에서 실행 파일을 실행하고 메모리 접근, 할당 및 해제를 감시하여 특수 메모리 할당 라이브러리로 재컴파일할 필요가 없다.[1]

2. 3. 특수 라이브러리 및 가상 머신

Electric Fence와 같이 특수 메모리 할당 라이브러리를 사용하여 오류를 탐지하는 방식이 있다.[1] Electric Fence는 malloc으로 메모리 할당을 디버그한다.[1] Valgrind 같은 몇몇 메모리 디버거들은 가상 머신과 유사한 환경에서 실행 파일을 실행하여 메모리 접근, 할당 및 해제를 모니터링하므로, 특수 메모리 할당 라이브러리로 재컴파일할 필요가 없다.[1]

3. 정적 분석 도구와의 비교

정적 분석 도구는 코드를 실행하지 않고 분석하여 메모리 오류를 찾을 수 있다. 반면 메모리 디버거는 애플리케이션 실행 중에 작동한다. 이 두 기술은 서로 다른 문제점을 발견할 수 있으므로 함께 사용하면 더 좋은 결과를 얻을 수 있다.[2]

3. 1. 정적 분석 도구의 장단점

정적 분석 도구는 코드를 실행하지 않고 분석하여 메모리 오류를 찾을 수 있다는 장점이 있다. 이러한 특징 덕분에 애플리케이션 실행 전에 잠재적인 오류를 발견할 수 있다.[2]

하지만 정적 분석 도구는 실제 실행 환경에서만 발생하는 오류를 놓칠 수 있다는 단점도 존재한다. 메모리 디버거는 애플리케이션 실행 중에 작동하는 반면, 정적 분석은 실행 없이 코드를 분석하기 때문이다.[2] 따라서 두 가지 기술을 함께 사용하면 최상의 결과를 얻을 수 있다.[2]

3. 2. 메모리 디버거의 장단점

메모리 디버거는 메모리 접근, 할당 및 할당 해제를 모니터링하여 프로그래머가 소프트웨어 버그를 피하고, 긴 런타임 동안 소프트웨어의 높은 신뢰성을 보장하도록 돕는다.[2] Valgrind와 같은 일부 메모리 디버거는 가상 머신 환경에서 실행 파일을 실행하여 메모리 접근, 할당 및 해제를 모니터링하므로, 특별한 메모리 할당 라이브러리로 재컴파일할 필요가 없다.

메모리 디버거는 애플리케이션이 실행되는 동안 애플리케이션의 일부로 작동하는 반면, 정적 코드 분석은 코드를 실행하지 않고 분석하여 수행된다.[2] 이 두 가지 기술은 서로 다른 문제 인스턴스를 찾을 수 있으며, 두 가지를 함께 사용하면 최상의 결과를 얻을 수 있다.[2]

3. 3. 상호 보완적인 활용

정적 분석 도구는 메모리 오류를 찾는 데 도움을 줄 수 있다. 메모리 디버거는 애플리케이션이 실행되는 동안 애플리케이션의 일부로 작동하지만, 정적 코드 분석은 코드를 실행하지 않고 분석한다. 이 두 기술은 서로 다른 문제점을 찾을 수 있으므로, 함께 사용하면 더 좋은 결과를 얻을 수 있다.[2]

4. 메모리 디버깅 도구 목록

메모리 디버깅 도구는 다양한 운영체제, 프로그래밍 언어 및 라이선스 형태로 제공된다.[1]

메모리 디버깅 도구 목록
이름운영체제라이선스언어기법
AddressSanitizer영어리눅스, 맥 OS자유/오픈 소스 (LLVM)C, C++컴파일 타임 인스트루먼테이션 (클랭GCC에서 사용 가능), 특수 라이브러리
Allinea DDT영어리눅스, AIX, Blue Gene사유/상용C, C++, F90, 슈퍼컴퓨터 병렬 프로그램런타임 (동적 링킹 시)
Alloclave윈도우사유/상용C++컴파일 타임
AQtime영어윈도우 (비주얼 스튜디오, Embarcadero IDEs)사유/상용.NET, C++, Java, Silverlight, JScript, VBScript[9]런타임
Bcheck영어솔라리스
BoundsChecker영어윈도우 (비주얼 스튜디오)사유/상용C++런타임 인터셉트 또는 컴파일 타임
checker리눅스, 솔라리스자유/오픈 소스 (GPL)C컴파일 타임 오버라이드
Daikon영어유닉스, 윈도우, 맥 OS X[10]자유/오픈 소스[11]Java, C/C++, Perl, Eiffel[10]런타임 동적 불변성 감지
Debug_new영어(일반 기술)(일반 기술)C++컴파일 타임 오버라이드
Deleaker윈도우 (비주얼 스튜디오)사유/상용C, C++런타임 인터셉트
dmalloc영어Any자유/오픈 소스C컴파일 타임 오버라이드
dlmalloc영어[12]Any자유/오픈 소스 (public domain)C컴파일 타임 오버라이드
Dr Memory윈도우, 리눅스자유/오픈 소스 (LGPL)C, C++런타임
Duma유닉스, 윈도우자유/오픈 소스 (GPL)C, C++컴파일 타임 오버라이드
Electric Fence영어유닉스자유/오픈 소스 (GPL)C, C++컴파일 타임 오버라이드
graprofGNU/리눅스자유/오픈 소스 (GPL)C, C++링크 타임 오버라이드
HP Wildebeest (WDB)[13]gdb 기반
IBM OLIVERIBM System/360/370/390사유/상용어셈블리어, 코볼, PL/I
IBM Rational Purify유닉스, 윈도우사유/상용C++, Java, .NET런타임
Insure++영어윈도우 (비주얼 스튜디오 플러그인), 유닉스사유/상용C, C++
Intel Parallel Inspector윈도우 (비주얼 스튜디오)사유/상용C, C++
libcwd영어리눅스 (gcc)자유/오픈 소스C, C++컴파일 타임 오버라이드
libumem영어솔라리스솔라리스 번들링크 타임 오버라이드
MemCheck영어 (Hal Duston)[14]유닉스, 맥 OS X자유/오픈 소스 (GPL)C, C++컴파일 타임 오버라이드
Memcheck영어 (Société Générale)[15][16]윈도우 (볼랜드 델파이)자유/오픈 소스C, C++컴파일 타임 오버라이드
DDDebug[17]윈도우 (볼랜드 델파이)상용Delphi (5 to XE7)런타임
MemPro영어[18]윈도우 (비주얼 스튜디오)Free betaC++컴파일 타임 오버라이드, TCP 연결 (메모리 이벤트 추적)
Memwatch영어Any (프로그래밍 라이브러리)자유/오픈 소스C컴파일 타임 오버라이드
mpatrol영어[19]유닉스, 윈도우자유/오픈 소스 (LGPL)C, C++
mtrace영어다양한자유/오픈 소스 (LGPL)GNU C 라이브러리빌트인, 결과 접근
MTuner영어다양한사유/상용C, C++런타임 인터셉트, 링크 타임 오버라이드 (MSVC, Clang and GCC), 누수 탐지
ocp-memprof[20]리눅스 64사유/오픈 소스OCaml컴파일 타임
Oracle Solaris Studio리눅스, 솔라리스사유 프리웨어C, C++, 포트란
OpenPAT영어[21][22]Any프리 (등록 필요)C, C++, 자바, 포트란컴파일 타임 인스트루먼테이션, 런타임 인터셉트
softwareverify[23]윈도우사유 상용.NET, C, C++, 자바, 자바스크립트, Lua, 파이썬, 루비, VMs런타임
Splint영어Any자유/오픈 소스 (GPL)C정적 프로그램 분석
TotalView영어유닉스, 맥 OS X사유/상용C, C++, 포트란런타임
Valgrind리눅스, 맥 OS, 안드로이드자유/오픈 소스 (GPL)Any런타임 인터셉트
Visual Leak Detector영어[24]윈도우 (비주얼 스튜디오)자유/오픈 소스 (LGPL)C, C++컴파일 타임 오버라이드, 누수 탐지
WinDbg윈도우사유 프리웨어C, C++, .NET, 파이썬런타임
D Profiler[25]윈도우자유/오픈 소스C, C++런타임


4. 1. 주요 도구 목록

메모리 디버깅을 할 때 유용한 도구들의 목록이다. 프로파일러는 메모리 디버거와 함께 사용될 수 있다.

메모리 디버깅 도구 목록
이름운영체제라이선스언어기법
AddressSanitizer영어리눅스, 맥 OS자유/오픈 소스 (LLVM)C, C++컴파일 타임 인스트루먼테이션 (클랭GCC에서 사용 가능), 특수 라이브러리
Allinea DDT영어리눅스, AIX, Blue Gene사유/상용C, C++, F90, 슈퍼컴퓨터 병렬 프로그램런타임 (동적 링킹 시)
[http://www.alloclave.com Alloclave]윈도우사유/상용C++컴파일 타임
AQtime영어윈도우 (비주얼 스튜디오, Embarcadero IDEs)사유/상용.NET, C++, Java, Silverlight, JScript, VBScript[9]런타임
Bcheck영어솔라리스
BoundsChecker영어윈도우 (비주얼 스튜디오)사유/상용C++런타임 인터셉트 또는 컴파일 타임
checker리눅스, 솔라리스자유/오픈 소스 (GPL)C컴파일 타임 오버라이드
Daikon영어유닉스, 윈도우, 맥 OS X[10]자유/오픈 소스[11]Java, C/C++, Perl, Eiffel[10]런타임 동적 불변성 감지
Debug_new영어(일반 기술)(일반 기술)C++컴파일 타임 오버라이드
[http://deleaker.com Deleaker]윈도우 (비주얼 스튜디오)사유/상용C, C++런타임 인터셉트
dmalloc영어Any자유/오픈 소스C컴파일 타임 오버라이드
dlmalloc영어[12]Any자유/오픈 소스 (public domain)C컴파일 타임 오버라이드
[http://code.google.com/p/drmemory/ Dr Memory]윈도우, 리눅스자유/오픈 소스 (LGPL)C, C++런타임
Duma유닉스, 윈도우자유/오픈 소스 (GPL)C, C++컴파일 타임 오버라이드
Electric Fence영어유닉스자유/오픈 소스 (GPL)C, C++컴파일 타임 오버라이드
[https://web.archive.org/web/20131213083234/http://graprof.grapentin.org/ graprof]GNU/리눅스자유/오픈 소스 (GPL)C, C++링크 타임 오버라이드
HP Wildebeest (WDB)[13]gdb 기반
IBM OLIVERIBM System/360/370/390사유/상용어셈블리어, 코볼, PL/I
IBM Rational Purify유닉스, 윈도우사유/상용C++, Java, .NET런타임
Insure++영어윈도우 (비주얼 스튜디오 플러그인), 유닉스사유/상용C, C++
Intel Parallel Inspector윈도우 (비주얼 스튜디오)사유/상용C, C++
libcwd영어리눅스 (gcc)자유/오픈 소스C, C++컴파일 타임 오버라이드
libumem영어솔라리스솔라리스 번들링크 타임 오버라이드
MemCheck영어 (Hal Duston)[14]유닉스, 맥 OS X자유/오픈 소스 (GPL)C, C++컴파일 타임 오버라이드
Memcheck영어 (Société Générale)[15][16]윈도우 (볼랜드 델파이)자유/오픈 소스C, C++컴파일 타임 오버라이드
DDDebug[17]윈도우 (볼랜드 델파이)상용Delphi (5 to XE7)런타임
MemPro영어[18]윈도우 (비주얼 스튜디오)Free betaC++컴파일 타임 오버라이드, TCP 연결 (메모리 이벤트 추적)
Memwatch영어Any (프로그래밍 라이브러리)자유/오픈 소스C컴파일 타임 오버라이드
mpatrol영어[19]유닉스, 윈도우자유/오픈 소스 (LGPL)C, C++
mtrace영어다양한자유/오픈 소스 (LGPL)GNU C 라이브러리빌트인, 결과 접근
MTuner영어다양한사유/상용C, C++런타임 인터셉트, 링크 타임 오버라이드 (MSVC, Clang and GCC), 누수 탐지
ocp-memprof[20]리눅스 64사유/오픈 소스OCaml컴파일 타임
Oracle Solaris Studio리눅스, 솔라리스사유 프리웨어C, C++, 포트란
OpenPAT영어[21][22]Any프리 (등록 필요)C, C++, 자바, 포트란컴파일 타임 인스트루먼테이션, 런타임 인터셉트
softwareverify[23]윈도우사유 상용.NET, C, C++, 자바, 자바스크립트, Lua, 파이썬, 루비, VMs런타임
Splint영어Any자유/오픈 소스 (GPL)C정적 프로그램 분석
TotalView영어유닉스, 맥 OS X사유/상용C, C++, 포트란런타임
Valgrind리눅스, 맥 OS, 안드로이드자유/오픈 소스 (GPL)Any런타임 인터셉트
Visual Leak Detector영어[24]윈도우 (비주얼 스튜디오)자유/오픈 소스 (LGPL)C, C++컴파일 타임 오버라이드, 누수 탐지
WinDbg윈도우사유 프리웨어C, C++, .NET, 파이썬런타임
D Profiler[25]윈도우자유/오픈 소스C, C++런타임


4. 2. 한국에서 주로 사용되는 도구

도구 이름운영 체제라이선스대상 언어기술
AddressSanitizer리눅스, 맥 OS자유/오픈 소스 (LLVM)C, C++, Rust컴파일 시간 계측 (Clang 및 GCC에서 사용 가능) 및 특수 라이브러리
Valgrind|발그라인드영어리눅스, Mac OS, 안드로이드자유/오픈 소스 (GPL)임의런타임 인터셉트
WinDbg윈도우독점 프리웨어C, C++, .NET, Python런타임


  • '''AddressSanitizer''': Clang 및 GCC 컴파일러에 내장되어 있어 사용하기 편리하다. 리눅스와 맥 OS에서 사용할 수 있다.
  • '''Valgrind''': 리눅스 환경에서 널리 사용되는 오픈 소스 메모리 디버거이다.
  • '''Visual Studio Debugger''': 윈도우 환경에서 Visual Studio를 사용하는 경우, 강력한 디버깅 기능을 제공하는 도구이다. (Visual Studio Debugger는 원문에 없지만 요약에 언급되어 추가)

참조

[1] 웹사이트 Review: 5 memory debuggers for Linux coding http://www.computerw[...] '20 November 2015' 2017-08-24
[2] 웹사이트 Dynamic Analysis vs. Static Analysis https://software.int[...] 2017-08-24
[3] 웹사이트 'Managed Code - AQtime Pro | SmartBear' https://web.archive.[...] 2013-01-14
[4] 웹사이트 The Daikon Invariant Detector User Manual http://groups.csail.[...]
[5] 웹사이트 The Daikon Invariant Detector User Manual http://groups.csail.[...]
[6] URL http://smartbear.com[...]
[7] URL http://groups.csail.[...]
[8] URL http://groups.csail.[...]
[9] 웹인용 보관된 사본 https://web.archive.[...] 2015-12-24
[10] URL http://groups.csail.[...]
[11] URL http://groups.csail.[...]
[12] 웹인용 보관된 사본 https://web.archive.[...] 2015-12-24
[13] 웹인용 보관된 사본 http://h71028.www7.h[...] 2015-12-24
[14] 웹인용 Memcheck - Memory Checker https://web.archive.[...] 2015-12-24
[15] URL http://v.mahon.free.[...]
[16] 문서 Denis Golovan Fork https://code.launchp[...]
[17] URL http://ddobjects.de/
[18] URL http://www.puredevso[...]
[19] URL http://mpatrol.sourc[...]
[20] URL http://memprof.typer[...]
[21] URL OpenPAT: The Open Performance Analysis Toolkit http://www.OpenPAT.o[...]
[22] 문서 OpenPAT: Analyzing Programs the Easy Way http://www.openpat.o[...]
[23] URL http://www.softwarev[...]
[24] 웹인용 보관된 사본 https://web.archive.[...] 2015-12-24
[25] URL https://github.com/x[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com